from django import template
from django.urls import reverse

from myadmin import models

register = template.Library()
from django.utils.html import format_html

@register.simple_tag
def showpage(count,request):
    '''
    p:当前页
    u:之前的选择记录
    s:将要返回的html页面代码内容
    format_html():解决默认禁止转义代码的方法
    '''

    # 获取页面中的搜索条件 &types=phone&keywords=11,page参数不需要,所以先排除
    data = request.GET.dict()
    u = ''
    for k,v in data.items():
        if k != 'page':
            u += '&{k}={v}'.format(k=k,v=v)

    # 当前页码 p
    p = int(request.GET.get('page',1))
    # 起始页
    begin = p-4
    end = p + 5
    # 判断如果当前页 小于5
    if p < 5:
        # 则开始页为1
        begin = 1
        # 结束页为10
        end = 10
    # 判断如果总页数小于10
    try:
        count = int(count)
    except:
        print('count无法转换为整型 : ',count)

    if count < 10:
        begin = 1
        end = count

    # 当前页如果大于总页数-5
    if p > count - 5:
        # 则开始页为总页数-9
        begin = count - 9
        # 结束页为总页数
        end = count

    # 判断如果开始页 小于等于 0,则开始页为1
    if begin <= 0:
        begin = 1
    # 通过上面的限制产生begin和end作为循环的参数共下面使用
    # 开始拼接行程需要的s作为网页元素返回
    s = ''
    # 依次拼接首页,上一页,第n页...下一页
    s += '<li><a href="?page=1' + u + '">首页</a></li>'
    # 下面为返回小一页的方法
    if p == 1:
        s += '<li class="am-disabled"><a href="?page=1' + u + '">«</a></li>'
    else:
        s += '<li><a href="?page=' + str(p - 1) + u + '">«</a></li>'
    # 下面为正常显示多个页码的循环输出代码
    for x in range(begin,end+1):
        # 判断是否是当前页码来选择性的给 active 类来给予选中效果
        if p == x:
            s += '<li class="am-active"><a href="?page=' + str(x) + u + '">' + str(x) + '</a></li>'
        else:
            s += '<li><a href="?page=' + str(x) + u + '">' + str(x) + '</a></li>'
    # 下一页(P+1)
    if p == count:
        s += '<li class="am-disabled"><a href="?page=' + str(count) + u + '">»</a></li>'
    else:
        s += '<li><a href="?page=' + str(p + 1) + u + '">»</a></li>'
    # 尾页
    s += '<li><a href="?page=' + str(count) + u + '">尾页</a></li>'



    # 传送html标签到前端页面解析
    return format_html(s)



@register.simple_tag
def ShowNav():
    '''

    :param request:
    :return:
    '''

    obj = models.Types.objects.exclude(pid = 0)
    str1 =''
    for i in obj:
        str1 += "<li class='layout-header-nav-item'><a href='%s' class='layout-header-nav-link'>%s</a></li>"%(reverse('myhome_list',args=(i.id,)) , i.name)
    return format_html(str1)


@register.simple_tag
def ShowTotal(num,price):
    res = num * price
    return res



















































